﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataLayer.EF;
using EntityLayer;

namespace DataLayer.CLASES_Seguridad_DAO
{
    public class clsGrupoDAO
    {
        public BD_TRASNFINTER_Seguridad DBSEGURIDAD = new BD_TRASNFINTER_Seguridad();

        public List<t_grupo> Listar()
        {
            try
            {
                var q = from c in DBSEGURIDAD.t_grupo
                        select c;

                return q.ToList();

            }
            catch (Exception ex)
            {
                return new List<t_grupo>();
            }
        }

        public bool Insertar(t_grupo Obj)
        {
            try
            {
                DBSEGURIDAD.AddObject("t_grupo", Obj);
                DBSEGURIDAD.SaveChanges();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public bool Modificar(t_grupo obj)
        {
            try
            {
                DBSEGURIDAD.AttachTo("t_grupo", obj);
                DBSEGURIDAD.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                DBSEGURIDAD.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool Eliminar(t_grupo obj)
        {
            try
            {
                DBSEGURIDAD.AttachTo("t_grupo", obj);
                DBSEGURIDAD.DeleteObject(obj);
                DBSEGURIDAD.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public List<t_grupo> listarAccesosUsuarios()
        {
            List<t_grupo> lista = new List<t_grupo>();
            try
            {
                var q = from g in DBSEGURIDAD.t_grupo
                        where g.IND_ESTADO == "A"
                        orderby g.DES_NOMBRE
                        select g;

                lista = q.ToList();
                return lista;
            }
            catch (Exception ex)
            {
                return new List<t_grupo>();
            }
        }

        public List<t_usuario_grupo> listarUsuario_Grupo()
        {
            List<t_usuario_grupo> lista = new List<t_usuario_grupo>();
            try
            {
                var q = from g in DBSEGURIDAD.t_usuario_grupo
                        select g;

                lista = q.ToList();
                return lista;
            }
            catch (Exception ex)
            {
                return new List<t_usuario_grupo>();
            }
        }

        public bool Actualiza_EstadoGrupo(int idGrupo, string estado)
        {
            try
            {
                DBSEGURIDAD.ExecuteStoreCommand("UPDATE T_GRUPO set IND_ESTADO='" + estado + "' where ID_GRUPO=" + idGrupo);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public List<int> ObtenerOpcion_Grupo(int idGrupo)
        {
            List<int> lis = new List<int>();
            List<vw_grupo_opcion> listaOpcion = new List<vw_grupo_opcion>();
            try
            {
                var q = from c in DBSEGURIDAD.vw_grupo_opcion
                        where c.ID_OPCION == idGrupo
                        select c;

                listaOpcion = q.ToList();

                foreach (vw_grupo_opcion item in listaOpcion)
                {
                    lis.Add(item.ID_OPCION);
                }

                return lis;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        public t_grupo ObtenerGrupoxId(int idGrupo)
        {
            List<t_grupo> lis = new List<t_grupo>();
            t_grupo group = new t_grupo();
            try
            {
                var q = from c in DBSEGURIDAD.t_grupo
                        where c.ID_GRUPO == idGrupo
                        select c;

                lis = q.ToList();

                group = lis[0];
                return group;
            }
            catch (Exception ex)
            {
                return group;
            }
        }

        public List<t_grupo> listarGrupo2()
        {
            List<t_grupo> lista = new List<t_grupo>();
            try
            {
                var q = from g in DBSEGURIDAD.t_grupo
                        orderby g.DES_NOMBRE
                        select g;

                lista = q.ToList();
                return lista;
            }
            catch (Exception ex)
            {
                return new List<t_grupo>();
            }
        }

        public bool EliminarGrupoopcion(int id_grupo)
        {
            try
            {
                DBSEGURIDAD.ExecuteStoreCommand("DELETE from t_grupo_opcion where id_grupo=" + id_grupo);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public bool InsertarGrupoOpcion(int GRUPO ,int OPCION)
        {
            try
            {
                //DBSEGURIDAD.AddObject("t_grupo_opcion", Obj);
                //DBSEGURIDAD.SaveChanges();
                DBSEGURIDAD.ExecuteStoreCommand("INSERT INTO t_grupo_opcion (ID_GRUPO, ID_OPCION)VALUES('" + GRUPO + "','" + OPCION + "')");
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }            
        }

        public int ObtenerIdGrupoMax()
        {
            int id_grupo = 0;

            try
            {
                var q = (from c in DBSEGURIDAD.t_grupo.ToList()
                         select c.ID_GRUPO).DefaultIfEmpty(0).Max();

                id_grupo = q;
                return id_grupo + 1;
            }
            catch (Exception ex)
            {
                return 1;
            }
        }



    }
}
